#ifndef _TELECTRL_H_
#define _TELECTRL_H_


typedef union _DCO{ //遥控命令
	struct {
		#if (IEC_ENDIAN  == IEC_LITTLE_ENDIAN)
			uint8_t DCS : 2 ; //＝0＝3：不允许＝1：OFF，开＝2：ON，合
			uint8_t QU  : 5 ; //目前固定为 0
			uint8_t SE  : 1 ; //=0：执行,＝1：选择
		#else
			uint8_t SE  : 1 ; //=0：执行,＝1：选择
			uint8_t QU  : 5 ; //目前固定为 0
			uint8_t DCS : 2 ; //＝0＝3：不允许＝1：OFF，开＝2：ON，合
		#endif
	}part;

	#define DCO_VAL(DCS,SE) ((((SE)&0x1)<<7)|((DCS)&0x3))
	uint8_t val;
}DCO_t;



typedef union _SCO{ //遥控命令
	struct {
		#if (IEC_ENDIAN  == IEC_LITTLE_ENDIAN)
			uint8_t DCS : 1 ; //＝0:OFF，开＝1：ON，合
			uint8_t QU  : 6 ; //目前固定为 0
			uint8_t SE  : 1 ; //=0：执行,＝1：选择
		#else
			uint8_t SE  : 1 ; //=0：执行,＝1：选择
			uint8_t QU  : 6 ; //目前固定为 0
			uint8_t DCS : 1 ; //＝0＝3：不允许＝1：OFF，开＝2：ON，合
		#endif
	}part;

	#define SCO_VAL(DCS,SE) ((((SE)&0x1)<<7)|((DCS)&0x1))
	uint8_t val;
}SCO_t;




typedef union _RCO{ //步调节命令
	struct {
		#if (IEC_ENDIAN  == IEC_LITTLE_ENDIAN)
			uint8_t RCS : 2 ; //＝0＝3：不允许＝1：OFF，开＝2：ON，合
			uint8_t QU  : 5 ; //目前固定为 0
			uint8_t SE  : 1 ; //=0：执行,＝1：选择
		#else
			uint8_t SE  : 1 ; //=0：执行,＝1：选择
			uint8_t QU  : 5 ; //目前固定为 0
			uint8_t RCS : 2 ; //＝0＝3：不允许＝1：OFF，开＝2：ON，合
		#endif
	}part;

	#define RCO_VAL(RCS,SE) ((((SE)&0x1)<<7)|((RCS)&0x3))
	uint8_t val;
}RCO_t;




/**
  * @author   古么宁
  * @brief    设置 32 bit 串
  * @param    bus      : 总线
  * @param    ASDUrx   : 接收到的 ASDU 数据包
  * @param    ASDUlen  : 接收到的 ASDU 数据包长度
  * @return   don't care
*/
void iec10x_set32bit(iec10x_t * bus , uint8_t * ASDUrx,int ASDUrxlen);




/**
  * @author   古么宁
  * @brief    遥控响应
  * @param    bus      : 总线
  * @param    ASDUrx   : 接收到的 ASDU 数据包
  * @param    ASDUlen  : 接收到的 ASDU 数据包长度
  * @return   don't care
*/
void iec10x_telectrl_respond(iec10x_t * bus , uint8_t * ASDUrx,int ASDUrxlen);

#endif
